home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1996 / MacHack 1996.toast / Hacks / Hacks ’92 / Bell Choir ƒ / choir source / Cmain.c < prev   
Encoding:
C/C++ Source or Header  |  1992-06-19  |  6.3 KB  |  233 lines  |  [TEXT/KAHL]

  1. #include "myIncludes.h"
  2. #include "myProtos.h"
  3.  
  4. #define kResumeMask         1       /* bit of message field for resume vs. suspend */
  5. #define kNoFind                130
  6. #define kSearchDlog            200
  7.  
  8.  
  9. LaunchParamBlockRec launchThis;
  10.  
  11. Boolean        gQuit, gInBackground;
  12. EventRecord    gEvRecord;
  13. AEDesc        gTheAddress;
  14. music        gTrebMusic[1024];
  15. music        gBassMusic[1024];
  16. long        gNumMembers;
  17. DialogPtr    gDlog;
  18.  
  19. void main(void);
  20. void InitAEStuff(void);
  21. OSErr FindReceiver(AEDesc *theAddress);    /* sender only */
  22. void zero_mem(register char*, register short);
  23.  
  24. void do_event(EventRecord *gEvRec);
  25.  
  26. void main(void)
  27. {
  28. OSErr    err;
  29.  
  30.     MaxApplZone();
  31.     InitGraf((Ptr)&qd.thePort);
  32.     InitFonts();
  33.     InitWindows();
  34.     InitMenus();
  35.     TEInit();
  36.     InitDialogs(nil);
  37.     InitCursor();
  38.     gQuit = FALSE;
  39.     
  40.     InitAEStuff();
  41.     gDlog = NULL;
  42.  #define CONDUCTOR /* */
  43. #ifdef CONDUCTOR
  44.     gDlog = GetNewDialog(128, NULL, (DialogPtr)-1);
  45.     if (gDlog == NULL)
  46.         {
  47.         SysBeep(0);
  48.         ExitToShell();
  49.         }
  50. #endif CONDUCTOR
  51.         
  52.     do {
  53.         WaitNextEvent(everyEvent, &gEvRecord, 30, nil);
  54.         do_event(&gEvRecord);
  55.         }
  56.     while (gQuit != TRUE);
  57.     
  58.     if (gDlog)
  59.         DisposeDialog(gDlog);
  60.     ExitToShell();
  61. }
  62.  
  63.  
  64. void do_mouse(EventRecord *evp);
  65. void do_mouse(EventRecord *evp)
  66. {
  67. DialogPtr    dlogP;
  68. short        item;
  69.  
  70.  
  71.     if (DialogSelect(evp, &dlogP, &item))
  72.         {
  73.         SetPort(dlogP);
  74.         switch (item)
  75.             {
  76.             case 1:    if (get_music())
  77.                         gNumMembers = 0;
  78.                     break;
  79.             case 2:    break;
  80.             case 3:    if ((get_members(&gNumMembers) == noErr) && gNumMembers)
  81.                         send_music();
  82.                     break;
  83.             case 5:    if ((get_self(&gNumMembers) == noErr) && gNumMembers)
  84.                         send_music();
  85.                     break;
  86.             case 4:    gQuit = TRUE;    break;
  87.             default:    SysBeep(0);
  88.             }
  89.         }
  90. }
  91.  
  92.  
  93. void do_event(EventRecord *gEvRec)
  94. {
  95. WindowPtr    awindow;
  96. Point        pt;
  97. OSErr        err;
  98. short        item;
  99.  
  100.     switch (gEvRec->what)
  101.         {
  102.         case nullEvent:        break;
  103.         case activateEvt:    break;
  104.         case autoKey:        break;
  105.         case keyUp:            break;
  106.         case networkEvt:    break;        /* don't care */
  107.         case driverEvt:        break;
  108.         case mouseUp:        break;
  109.         
  110.         case keyDown:        gQuit = TRUE;        break;
  111.         
  112.         case updateEvt:
  113.             if (IsDialogEvent(gEvRec))
  114.                 DialogSelect(gEvRec, &awindow, &item);
  115.             break;
  116.         
  117.         case mouseDown:     /* first see where the hit was */
  118.             if (IsDialogEvent(gEvRec))
  119.                 do_mouse(gEvRec);
  120.             else
  121.                 switch (FindWindow(gEvRec->where, &awindow))
  122.                     {
  123.                     case inDesk:    break;
  124.                     case inSysWindow:
  125.                         SystemClick(&gEvRecord, awindow);    break;
  126.                     
  127.                     case inMenuBar:    break;
  128.                     case inContent:    break;
  129.                     case inDrag:    break;
  130.                     case inGrow:    break;
  131.                     case inGoAway:    break;
  132.                     }
  133.             break;
  134.         
  135.         case app4Evt:
  136.             switch ((gEvRec->message >> 24) & 0x0FF)      /* high byte of message */
  137.                 {    
  138.                 case suspendResumeMessage:          /* suspend/resume is also an activate/deactivate */
  139.                     gInBackground = (gEvRec->message & kResumeMask) == 0;
  140.                     break;
  141.                 }
  142.             break;
  143.             
  144.         case diskEvt:    /* checks for an error on the mount */
  145.             pt.h = pt.v = 40;
  146.             if ( HiWord(gEvRec->message) != noErr )
  147.                 DIBadMount(pt, gEvRec->message);
  148.             break;
  149.             
  150.         case kHighLevelEvent:
  151.             err = AEProcessAppleEvent(&gEvRecord);
  152.             break;
  153.         
  154.         default:    break;    
  155.         }
  156. }
  157.  
  158.  
  159. /* I'm just launching it, not searching for a port */
  160. /* I use PBCatSearch to search for it's creator and file type. */
  161. OSErr FindReceiver(AEDesc *theAddress)
  162. {
  163.     OSErr        myError;
  164.     DialogPtr    search = GetNewDialog(kSearchDlog, nil, (WindowPtr)-1);
  165.     CSParamPtr    csBlockPtr = (CSParamPtr)NewPtrClear(sizeof(CSParam));
  166.     long        dirIDUnused;
  167.     Str32        nulString = "\p";
  168.     
  169.     DrawDialog(search);
  170.     if (csBlockPtr)                /* initialize the parameter block */
  171.         {
  172.         csBlockPtr->ioSearchInfo1 = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec));
  173.         csBlockPtr->ioSearchInfo2 = (CInfoPBPtr)NewPtrClear(sizeof(CInfoPBRec));
  174.         if (csBlockPtr->ioSearchInfo1 && csBlockPtr->ioSearchInfo2) 
  175.             {
  176.             csBlockPtr->ioMatchPtr = (FSSpecPtr)NewPtrClear(sizeof(FSSpec) * 1);  /* only looking for 1 */
  177.             if (csBlockPtr->ioMatchPtr) 
  178.                 {                /* Now see if we can create an optimization buffer */
  179.                 csBlockPtr->ioOptBuffer = NewPtr(2048);
  180.                 if (csBlockPtr->ioOptBuffer)
  181.                     csBlockPtr->ioOptBufSize = 2048;
  182.                 else
  183.                     csBlockPtr->ioOptBufSize = 0;           /* no buffer, sorry */
  184.                 csBlockPtr->ioReqMatchCount = 1;
  185.                 csBlockPtr->ioSearchTime = 0;               /* no timeout */
  186.                 }
  187.             }
  188.         }
  189.     
  190.     HGetVol(NULL, &csBlockPtr->ioVRefNum, &dirIDUnused);     /* get default volume for search */
  191.     csBlockPtr->ioSearchInfo1->hFileInfo.ioNamePtr = nil;
  192.     csBlockPtr->ioSearchInfo2->hFileInfo.ioNamePtr = nil;
  193.     csBlockPtr->ioSearchInfo1->hFileInfo.ioFlFndrInfo.fdCreator = 'WILD';        /* YOoooooooo!  Over HERE!!! */
  194.     csBlockPtr->ioSearchInfo1->hFileInfo.ioFlFndrInfo.fdType = 'APPL';
  195.     csBlockPtr->ioSearchBits = fsSBFlFndrInfo;
  196.     csBlockPtr->ioSearchInfo2->hFileInfo.ioFlFndrInfo.fdCreator = 0xFFFFFFFF;
  197.     csBlockPtr->ioSearchInfo2->hFileInfo.ioFlFndrInfo.fdType = 0xFFFFFFFF;
  198.     
  199.     myError = PBCatSearch(csBlockPtr, false);               /* search sync */
  200.     if (myError == noErr && csBlockPtr->ioActMatchCount != 0) 
  201.         {                        /* we found it, so launch it */
  202.         launchThis.launchBlockID = extendedBlock;
  203.         launchThis.launchEPBLength = extendedBlockLen;
  204.         launchThis.launchFileFlags = (unsigned short)nil;
  205.         launchThis.launchControlFlags = launchContinue + launchNoFileFlags + launchDontSwitch;
  206.         launchThis.launchAppSpec = &csBlockPtr->ioMatchPtr[0];
  207.         
  208.         myError = LaunchApplication(&launchThis);
  209.         if (myError == noErr)        /* it launched fine.  we can use the PSN to make a target */
  210.             AECreateDesc(typeProcessSerialNumber, (Ptr)&launchThis.launchProcessSN, 
  211.                             sizeof(ProcessSerialNumber), theAddress);
  212.         }
  213.     
  214.     /* no matter what happened, kill the memory allocated */
  215.     if (csBlockPtr)
  216.         {
  217.         if (csBlockPtr->ioSearchInfo1)
  218.             DisposPtr((Ptr)csBlockPtr->ioSearchInfo1);
  219.         if (csBlockPtr->ioSearchInfo2)
  220.             DisposPtr((Ptr)csBlockPtr->ioSearchInfo2);
  221.         if (csBlockPtr->ioMatchPtr)
  222.             DisposPtr((Ptr)csBlockPtr->ioMatchPtr);
  223.         if (csBlockPtr->ioOptBuffer)
  224.             DisposPtr((Ptr)csBlockPtr->ioOptBuffer);
  225.         DisposPtr((Ptr)csBlockPtr);
  226.         }
  227.     
  228.             /* catsearch section end */
  229.     DisposDialog(search);
  230.     return(myError);
  231. }
  232.  
  233.